package esmaltes.bean;

import java.io.Serializable;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.PersistenceException;

import esmaltes.model.Pais;
import esmaltes.repository.PaisRepository;

@Named
@javax.faces.view.ViewScoped
public class CadastroConsultaPaisBean extends TemplateBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@Inject
	private PaisRepository paisRepository;
	
	private Pais pais = new Pais();
	
	private List<Pais> paises;
	
	private List<Pais> paisesFiltradas;
		
	private Pais paisSelecionada;

	public void salvar() {
		
		Pais paisDescExistente = paisRepository.buscaPorDescricao(this.pais.getDescricao());
		
		if (paisDescExistente != null && !paisDescExistente.equals(this.pais)) {
			super.showFacesMessage("Já existe uma pais com a descrição informada.", 1);
		} else {
			try {
				
				this.paisRepository.guardar(pais);
				this.pais = new Pais();
				super.showFacesMessage("Registro salvo com sucesso!", 2);
				
				consulta();
				
			} catch (Exception e) {
				
				super.showFacesMessage("Erro ao tentar salvar o registro.", 1);
				System.err.println("Erro: " + e.getMessage());
				
				consulta();
				
			}
		}
		
	}
	
	public void excluir() {
		Pais paisExclusao = paisRepository.getManager().merge(paisSelecionada);
		
		try {
			
			paisRepository.remover(paisExclusao);
			paises.remove(paisSelecionada);
			super.showFacesMessage("PaisOrigem excluída com sucesso!", 2);
			
			consulta();
			
		} catch (PersistenceException pe) {
			
			super.showFacesMessage("PaisOrigem não pode ser excluída.", 1);
			System.err.println("Erro: " + pe.getMessage());
			
		} catch (Exception e) {
			
			super.showFacesMessage("Erro ao tentar excluir o registro.", 1);
			System.err.println("Erro: " + e.getMessage());
			
		}
		
	}

	public void consulta() {
		this.paises = paisRepository.todos("cd_pais");
	}

	public Pais getPais() {
		return pais;
	}

	public void setPais(Pais pais) {
		this.pais = pais;
	}

	public List<Pais> getPaises() {
		return paises;
	}

	public void setPaises(List<Pais> paises) {
		this.paises = paises;
	}

	public List<Pais> getPaisesFiltradas() {
		return paisesFiltradas;
	}

	public void setPaisesFiltradas(List<Pais> paisesFiltradas) {
		this.paisesFiltradas = paisesFiltradas;
	}

	public Pais getPaisSelecionada() {
		return paisSelecionada;
	}

	public void setPaisSelecionada(Pais paisSelecionada) {
		this.paisSelecionada = paisSelecionada;
	}

	

}
